package dac;

import dac.dao.CategoriaDAO;
import dac.dao.ConnectionFactory;
import dac.dao.PedidoDAO;
import dac.dao.ProdutoDAO;
import dac.dao.UsuarioDAO;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.util.Iterator;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


@WebServlet(name = "Ajax", urlPatterns = {"/Ajax"})
public class Ajax extends HttpServlet {

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        response.setContentType("text/html");
            
        try {
            Connection con = ConnectionFactory.getConnection();
            HttpSession session = request.getSession();
            
            
            String tipo = request.getParameter("tipo"), // categoria...
                   acao = request.getParameter("acao");
            
            if ( !tipo.equals("") && !acao.equals("") ) {
                // Categoria
                if ( tipo.equals("categoria") ) {
                    CategoriaDAO cat = new CategoriaDAO(con);
                    if( acao.equals("listar") ){
                        out.print( cat.listarTodosJSON() );
                    }
                    else if( acao.equals("cadastro") ){
                        out.print( cat.cadastroCategoria(request.getParameter("nome")) );
                    }
                    else if( acao.equals("remover") ) {
                        out.print( cat.removerCategoria(request.getParameter("id")) );
                    }
                    else if( acao.equals("editar") ) {
                        out.print( cat.editarCategoria(request.getParameter("id"), request.getParameter("nome")) );
                    }
                }
                // Produto
                else if ( tipo.equals("produto") ) {
                    ProdutoDAO pro = new ProdutoDAO(con);
                    if( acao.equals("listar") ){
                        String cat_id = request.getParameter("cat_id");
                        // Lista por categoria
                        if (!cat_id.isEmpty()) {
                            out.print( pro.listarTodosCategoriaJSON(cat_id) );
                        } else {
                            // Lista todos
                           out.print( pro.listarTodosJSON() );
                        }
                    } else if( acao.equals("exibir") ){
                        pro.setSession(request.getSession());
                        out.print( pro.exibeUmProduto(request.getParameter("produto_id")) );
                    } else if( acao.equals("exibirmulti") ){
                        out.print( pro.exibeMultiProdutoJSON(request.getParameter("produto_list")) ); //list ID
                    }
                    else if( acao.equals("cadastro") ){
                        out.print( pro.cadastroProduto(request.getParameterMap()) );
                    }
                }
                // Usuario
                else if ( tipo.equals("usuario") ) {
                    UsuarioDAO user = new UsuarioDAO(con, session);
                    if( acao.equals("cadastro") ) {
                        out.print( user.cadastroUsuario(request.getParameterMap()) );
                    }
                    if( acao.equals("editar") ) {
                        out.print( user.editarUsuario(request.getParameterMap()) );
                    }
                    else if( acao.equals("consulta") ) {
                        out.print( user.consultaValidaCadastro(request.getParameter("campo"),request.getParameter("valor")) );
                    }
                    else if( acao.equals("exibirtodos") ) {
                        out.print( user.listarTodosJSON() );
                    }
                    else if( acao.equals("exibirum") ) {
                        out.print( user.listarUmJSON(request.getParameter("id")) );
                    }
                    else if( acao.equals("busca") ) {
                        out.print( user.pesquisaCliente(request.getParameter("nome")) );
                    }
                    else if( acao.equals("remover") ) {
                        out.print( user.removerCliente(request.getParameter("id")) );
                    }
                }
                // Pedido
                else if ( tipo.equals("pedido") ) {
                    
                    PedidoDAO p = new PedidoDAO(con);
                    p.setSession(session);
                    if( acao.equals("novo") ) {
                        out.print( p.novoPedido(request.getParameter("produto_list"), request.getParameter("valor_total")) );
                    }
                    else if( acao.equals("listar") ) {
                        out.print( p.listarJSON() );
                    }
                    else if( acao.equals("remover") ) {
                        out.print( p.removerPedido(request.getParameter("id")) );
                    }
                    else if( acao.equals("listarum") ) {
                        out.print( p.listarUmJSON(request.getParameter("id")) );
                    }
                }
                // erro
                else {
                    out.print("false");
                }
            } else {
                out.print("false");
            }
            
        } catch(Exception e){
            out.println(e);
        } finally {            
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
